{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# `#ifndef`\n",
    "\n",
    "`#ifndef` 是 C++ 预处理器指令之一，用于检查宏是否已经被定义。如果宏没有被定义，那么编译器会执行后面的代码块。这个指令通常与 `#define` 和 `#endif` 一起使用，用于防止头文件的重复包含。\n",
    "\n",
    "下面示例代码，展示了如何使用 `#ifndef` 来避免头文件的重复包含："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "vscode": {
     "languageId": "c++"
    }
   },
   "outputs": [],
   "source": [
    "#ifndef HEADER_H\n",
    "#define HEADER_H\n",
    "\n",
    "// 在这里放置头文件中的代码\n",
    "\n",
    "#endif // HEADER_H"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "在上面的代码中，`#ifndef HEADER_H` 检查宏 `HEADER_H` 是否已经被定义。如果没有被定义，那么编译器会执行 `#define HEADER_H` 语句，将宏定义添加到预处理器的符号表中。然后，编译器会继续编译后续的代码，直到遇到 `#endif` 指令。\n",
    "\n",
    "通过这种方式，可以确保头文件只被包含一次，从而避免了重复定义和潜在的错误。"
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "C++14",
   "language": "C++14",
   "name": "xcpp14"
  },
  "language_info": {
   "codemirror_mode": "text/x-c++src",
   "file_extension": ".cpp",
   "mimetype": "text/x-c++src",
   "name": "C++14",
   "version": "14"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
